package com.awg.studyplan.excel.exp2read.poi;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * POI方式解析Excel文件
 * 
 * @author AWG
 * @date 2020-02-14
 * @version 1.0
 */
public class POIReadExcel {

    public static void main(String[] args) {
        /**
         * 定义需要解析的Excel文件
         */
        File file = new File(System.getProperty("user.home") + File.separatorChar + "Desktop" + File.separatorChar + "poi_exp_excel.xls");
        try {
            /**
             * 创建工作簿，读取需要解析的文件
             */
            HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
            /**
             * 获取工作簿的第一个工作表Sheet,
             *      1.getSheet(String name) -- 根据工作表的“名称”来获取制定名称工作表Sheet；
             *      2.getSheetAt(int index) -- 读取制定位置的工作表，如读取第一个工作表则为getSheetAt(0)
             */
            HSSFSheet sheet = workbook.getSheet("Sheet0");
            // HSSFSheet sheet = workbook.getSheetAt(0);
            /**
             * 循环读取指定工作表中的所有数据
             */
            // 定义工作表中的第一行
            int firstRowNum = 0;
            // 获取工作表中的最后一行
            int lastRowNum = sheet.getLastRowNum();
            for (int i = firstRowNum; i <= lastRowNum; i++) {
                // 读取某一行
                HSSFRow row = sheet.getRow(i);
                // 获取每一行的单元格的数量
                int lastCellNum = row.getLastCellNum();
                // 循环读取每一行的所有的单元格的内容
                for (int j = 0; j < lastCellNum; j++) {
                    HSSFCell rowCell = row.getCell(j);
                    String rowCellValue = rowCell.getStringCellValue();
                    System.out.print(rowCellValue + "\t\t");
                }
                System.out.println();
            }
            // 关闭流
            workbook.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
